package com.hjq.demo.ui.activity

import android.animation.*
import android.content.Intent
import android.view.*
import com.airbnb.lottie.LottieAnimationView
import com.dylanc.mmkv.MMKVOwner
import com.dylanc.mmkv.mmkvBool
import com.dylanc.mmkv.mmkvString
import com.gyf.immersionbar.BarHide
import com.gyf.immersionbar.ImmersionBar
import com.hjq.demo.R
import com.hjq.demo.app.AppActivity
import com.hjq.demo.http.api.UserInfoApi
import com.hjq.demo.http.model.HttpData
import com.hjq.demo.other.AppConfig
import com.hjq.demo.yuliao.MainActivity
import com.hjq.demo.yuliao.activity.LoginMyActivity
import com.hjq.http.EasyConfig
import com.hjq.http.EasyHttp
import com.hjq.http.listener.HttpCallback
import com.hjq.widget.view.SlantedTextView
import io.rong.imkit.RongIM
import io.rong.imkit.utils.RouteUtils
import io.rong.imlib.RongIMClient
import java.util.*


/**
 *    author : Android 轮子哥
 *    github : https://github.com/getActivity/AndroidProject-Kotlin
 *    time   : 2018/10/18
 *    desc   : 闪屏界面
 */
class SplashActivity : AppActivity(), MMKVOwner {

    private val lottieView: LottieAnimationView? by lazy { findViewById(R.id.lav_splash_lottie) }
    private val debugView: SlantedTextView? by lazy { findViewById(R.id.iv_splash_debug) }

    var isFirstLaunch by mmkvBool(default = true)
    var user by mmkvString("")

    override fun getLayoutId(): Int {
        return R.layout.splash_activity
    }

    override fun initView() {

        val tokenHeader = kv.decodeString("token", "")
        EasyConfig.getInstance().addHeader("api-user-token", tokenHeader)

        // 设置动画监听
        lottieView?.addAnimatorListener(object : AnimatorListenerAdapter() {
            override fun onAnimationEnd(animation: Animator?) {
                lottieView?.removeAnimatorListener(this)
                if (kv.decodeString("token", "") != "") {
                    val token = kv.decodeString("ry_token", "")
                    token?.let { connectIM(it) }
                } else {
                    LoginMyActivity.start(this@SplashActivity, "")
                    finish()
                }

            }
        })
    }

    override fun initData() {
        debugView?.let {
            it.setText(AppConfig.getBuildType().uppercase(Locale.getDefault()))
            if (AppConfig.isDebug()) {
                it.visibility = View.VISIBLE
            } else {
                it.visibility = View.INVISIBLE
            }
        }

        if (true) {
            return
        }
        // 刷新用户信息
        EasyHttp.post(this)
            .api(UserInfoApi())
            .request(object : HttpCallback<HttpData<UserInfoApi.Bean?>>(this) {

                override fun onSucceed(data: HttpData<UserInfoApi.Bean?>) {

                }
            })
    }

    override fun createStatusBarConfig(): ImmersionBar {
        return super.createStatusBarConfig()
            // 隐藏状态栏和导航栏
            .hideBar(BarHide.FLAG_HIDE_BAR)
    }

    override fun onBackPressed() {
        // 禁用返回键
        //super.onBackPressed();
    }

    override fun initActivity() {
        // 问题及方案：https://www.cnblogs.com/net168/p/5722752.html
        // 如果当前 Activity 不是任务栈中的第一个 Activity
        if (!isTaskRoot) {
            val intent: Intent? = intent
            // 如果当前 Activity 是通过桌面图标启动进入的
            if (((intent != null) && intent.hasCategory(Intent.CATEGORY_LAUNCHER)
                        && (Intent.ACTION_MAIN == intent.action))
            ) {
                // 对当前 Activity 执行销毁操作，避免重复实例化入口
                finish()
                return
            }
        }
        super.initActivity()
    }

    override fun onDestroy() {
        // 因为修复了一个启动页被重复启动的问题，所以有可能 Activity 还没有初始化完成就已经销毁了
        // 所以如果需要在此处释放对象资源需要先对这个对象进行判空，否则可能会导致空指针异常
        super.onDestroy()
    }

    fun connectIM(token: String) {

        RongIM.connect(token, object : RongIMClient.ConnectCallback() {
            override fun onSuccess(t: String?) {
                // 登录成功，
                MainActivity.start(this@SplashActivity)
                finish()
            }

            override fun onError(errorCode: RongIMClient.ConnectionErrorCode?) {
                if (errorCode == RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_EXPIRE) {
                    //从 APP 服务请求新 token，获取到新 token 后重新 connect()
                } else if (errorCode == RongIMClient.ConnectionErrorCode.RC_CONNECT_TIMEOUT) {
                    //连接超时，弹出提示，可以引导用户等待网络正常的时候再次点击进行连接
                    toast("连接超时")
                } else {
                    //其它业务错误码，请根据相应的错误码作出对应处理。
                }
            }

            override fun onDatabaseOpened(code: RongIMClient.DatabaseOpenStatus?) {
                if (RongIMClient.DatabaseOpenStatus.DATABASE_OPEN_SUCCESS.equals(code)) {
                    //本地数据库打开，跳转到会话列表页面
                } else {
                    //数据库打开失败，可以弹出 toast 提示。
                }
            }

        })

    }
}